home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Floppyshop 2
/
Floppyshop - 2.zip
/
Floppyshop - 2.iso
/
art&graf.ix
/
art-0039
/
source
/
dcqpiccn.asm
< prev
next >
Wrap
Assembly Source File
|
1997-04-16
|
6KB
|
230 lines
; Quick picture conversion routines
;
;
MODULE DCQPicCnv
;
SYMBOLS
;
;-----------------------------------------------------------------------
Label QQryLRPIndex ; ( PixelNo : CARDINAL;
; PGPtr : LowRes16PixelsPtr ) : CARDINAL;
;
; Register Usage: A0 ==> return address
; A1 ==> 16PixelsPtr
; D0 ==> result
; D1 ==> PixelNo ( 0 = bitno 15 )
; D2 ==> Scratch
; D3 ==> scratch
QQLRPI:
move.l (a7)+,a0 ;return addr
move.l (a7)+,a1 ;16Pixel Addr
move.w (a7)+,d1 ;pixelno
xor.w #$000F,d1 ;bitno
move.l #0,d0 ;result
move.w #1,d2 ;component
move.w (a1)+,d3
btst.w d1,d3
beq.s .1QQLRPI ;skip if not set
add.w d2,d0
.1QQLRPI:
add.w d2,d2 ;next component
move.w (a1)+,d3
btst.w d1,d3
beq.s .2QQLRPI ;skip if not set
add.w d2,d0
.2QQLRPI:
add.w d2,d2 ;next component
move.w (a1)+,d3
btst.w d1,d3
beq.s .3QQLRPI
add.w d2,d0
.3QQLRPI:
add.w d2,d2 ;next component
move.w (a1)+,d3
btst.w d1,d3
beq.s .4QQLRPI ;skip if not set
add.w d2,d0
.4QQLRPI:
jmp (a0)
;----------------------------------------------------------------------
Label QSetLTHPBP ;( StartBitno : CARDINAL;
; ScreenLine1,
; ScreenLine2 : HiRes16PixelsPtr;
; pbp : PrintBitPatternSet );
; Register Usage: A0 ==> return address
; A1 ==> Line 1 16PixelsPtr
; A2 ==> Line 2 16PixelsPtr
; D0 ==> Bitno
; D1 ==> Pattern set
; D2 ==> Scratch
QStLTHP:
move.l (a7)+,a0 ;return addr
move.w (a7)+,d1 ;print bit battern ( bit 15 = pbp 0 )
move.l (a7)+,a2 ;screenline 2
move.l (a7)+,a1 ;screenline 1
move.w (a7)+,d0 ;start bitno ( bit 15 = pixel 0 )
xor.w #$000F,d0 ;make into bitno
move.w (a1),d2 ;get current word for line 1
move.w (a2),d3 ; current bits for line 2
btst #15,d1 ;bit 0 in pbp
beq.s .1QSetLTHP
bset d0,d2 ;set bit in line 1
.1QSetLTHP:
btst #13,d1 ;bit 2 in pbp
beq.s .2QSetLTHP
bset d0,d3 ;set bit in line 2
.2QSetLTHP:
subq.w #1,d0
btst #14,d1 ;bit 1 in pbp
beq.s .3QSetLTHP
bset d0,d2 ;set bit in line 1
.3QSetLTHP:
btst #12,d1 ;bit 3 in pbp
beq.s .4QSetLTHP
bset d0,d3 ;set bit in line 2
.4QSetLTHP:
move.w d2,(a1) ;get current word for line 1
move.w d3,(a2) ; current bits for line 2
jmp (a0)
;----------------------------------------------------------------------
Label QQryMRPIndex ; ( PixelNo : CARDINAL;
; PGPtr : MedRes16PixelsPtr ) : CARDINAL;
;
; Register Usage: A0 ==> return address
; A1 ==> 16PixelsPtr
; D0 ==> result
; D1 ==> PixelNo ( 0 = bitno 15 )
; D2 ==> Scratch
; D3 ==> Scratch
QQMRPI:
move.l (a7)+,a0 ;return addr
move.l (a7)+,a1 ;16Pixel Addr
move.w (a7)+,d1 ;pixelno
xor.w #$000F,d1 ;bitno
move.l #0,d0 ;result
move.w #1,d2 ;component
move.w (a1)+,d3
btst.w d1,d3
beq.s .1QQMRPI ;skip if not set
add.w d2,d0
.1QQMRPI:
add.w d2,d2 ;next component
move.w (a1)+,d3
btst.w d1,d3
beq.s .2QQMRPI ;skip if not set
add.w d2,d0
.2QQMRPI:
jmp (a0)
;----------------------------------------------------------------------
Label QSetMTHPBP ;( StartBitno : CARDINAL;
; ScreenLine1,
; ScreenLine2 : HiRes16PixelsPtr;
; pbp : PrintBitPatternSet );
; Register Usage: A0 ==> return address
; A1 ==> Line 1 16PixelsPtr
; A2 ==> Line 2 16PixelsPtr
; D0 ==> Bitno
; D1 ==> Pattern set
; D2 ==> Scratch
QStMTHP:
move.l (a7)+,a0 ;return addr
move.w (a7)+,d1 ;print bit battern ( bit 15 = pbp 0 )
move.l (a7)+,a2 ;screenline 2
move.l (a7)+,a1 ;screenline 1
move.w (a7)+,d0 ;start bitno ( bit 15 = pixel 0 )
xor.w #$000F,d0 ;make into bitno
move.w (a1),d2 ;get current word for line 1
move.w (a2),d3 ; current bits for line 2
btst #15,d1 ;bit 0 in pbp
beq.s .1QSetMTHP
bset d0,d2 ;set bit in line 1
.1QSetMTHP:
btst #14,d1 ;bit 2 in pbp
beq.s .2QSetMTHP
bset d0,d3 ;set bit in line 2
.2QSetMTHP:
move.w d2,(a1) ; current word for line 1
move.w d3,(a2) ; current bits for line 2
jmp (a0)
;----------------------------------------------------------------------
Label QQryHRPixel ;( x, y : CARDINAL;
; VAR picture : HiResScreen ) : BOOLEAN;
;
; Constants;
HiResLineSize EQU 80 ;bytes long
; Register Usage: A0 ==> return address
; A1 ==> picture addr
; D0 ==> result
; D1 ==> x
; D2 ==> y
; D3 ==> Scratch
QQryHRP:
move.l (a7)+,a0 ;return addr
move.l (a7)+,a1 ;picture address
move.w (a7)+,d2 ;y
moveq.l #0,d1 ;clear hi word
move.w (a7)+,d1 ;x
moveq.l #0,d0 ;assume false
mulu #HiResLineSize,d2
divu #16,d1 ;d1 = number of words
add.w d1,d1 ;byte disp into picture
add.w d1,d2 ;disp into picture
swap d1 ;bitno to test
xor.w #$000f,d1 ;pixel no
move.w 0(a1,d2.l),d3 ;get 16pixels
btst.w d1,d3 ;check pixel
beq.s .0QQryHRPEnd
subq.l #1,d0 ;leave true
.0QQryHRPEnd:
jmp (a0)
;----------------------------------------------------------------------
Label QQColourComp ;( Colour : CARDINAL;
; VAR Red, Green, Blue : CARDINAL );
;
; Constants : colour = ???? XRRR XGGG XBBB
CMask EQU 0007;
CShift EQU 0004;
; Register Usage: A0 ==> return address
; A1 ==> blue
; A2 ==> Green
; A4 ==> Red
; D0 ==> scratch
; D1 ==> colour
QQColComp:
move.l (a7)+,a0 ;return addr
move.l (a7)+,a1 ;blue
move.l (a7)+,a2 ;green
move.l (a7)+,a4 ;red
move.w (a7)+,d1 ;colour
move.w d1,d0
and.w #CMask,d0
move.w (a1),d0 ;return blue
lsr.w #CShift,d1 ;green to lsb
move.w d1,d0
and.w #CMask,d0
move.w (a2),d0 ;return green
lsr.w #CShift,d1 ;green to lsb
move.w d1,d0
and.w #CMask,d0
move.w (a4),d0 ;return red
jmp (a0)
end